const dbServer = require('./db-server')
const BaseModel = require('./db-server/base-model')
const migrate = require('./migrate')
const ResultVo = require('./vo/ResultVo')
const { renderRequestType } = require('./utils/RequestTypeUtil')
const { handleClientAdapter } = require('./db-server/db-Adapter')
const asyncdb = require('./migrate/asyncdb')
const AuthController = require('./authorization/auth-controller')

/**
 * 启动项目
 * 参数[projectConfig]包含:
 * router, 路由
 * ResultVo, 自定义或者系统自带的结果规范类
 * Datasource, 数据源
 * authUserModel, 授权模块model
 * authDataSourceKey, 授权模块对应的数据源key
 * authPrivateKey, 授权模块jwt使用私钥
 * authTokenTime token时间 单位有hour/minute/second，格式如 11hour
 * @param {*} projectConfig 项目配置
 */
function startProject(projectConfig = {}) {
  // 启动数据库服务
  dbServer(projectConfig) 
}

module.exports = {
  /**
   * 启动项目
   * { 
   *    router, 路由
   *    Datasource 数据源
   * }
   * @param {*} config
   */
  startProject,
  // 数据表对应的model的基类
  BaseModel,
  /**
   * 数据库生成models
   * @param {*} data 数据库配置对象
   */
  migrate,
  /**
   * models生成表
   * @param {*} data 数据库配置对象
   * @param {*} models models配置，项目中的models/index.js中配置各模块
   */
  asyncdb,
  /**
   * 控制层公共函数
   * 定义api函数
   * 定义swagger参数描述及返回描述
   */
  renderRequestType,
  /**
   * 持久层操作对象
   * 对象包含的功能：
   * 增删改查数据库表
   */
  handleClientAdapter,
  /**
   * 公共的返回对象
   */
  ResultVo,
  /**
   * 登录
   * 注册
   */
  AuthController
}
